package be.vdab.Servlets;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.vdab.dao.ReadSqlDAO;
import be.vdab.entities.Voorstelling;

/**
 * Servlet implementation class ReserverenServlet
 */
@WebServlet("/reserveren.htm")
public class ReserverenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String VIEW = "/WEB-INF/JSP/reserveren.jsp";
    private static final String REDIRECT_CORRECT_URL = "/reservatiemandje.htm";
    private static final String REDIRECT_INCORRECT_URL = "/reserveren.htm";
    private ReadSqlDAO sqlDAO = new ReadSqlDAO();
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	HttpSession session = request.getSession();
    	int voorstellingsNr = Integer.parseInt(request.getParameter("voorstellingsNr"));
    	Voorstelling voorstelling = sqlDAO.findOneVoorstelling(voorstellingsNr);
    	request.setAttribute("voorstelling", voorstelling);
    	
    	if (session.getAttribute("reservatieMap") == null){
    		Map<Integer,Integer> reservatieMap = new HashMap<Integer,Integer>();
    		reservatieMap.put(voorstellingsNr, 0);
			session.setAttribute("reservatieMap", reservatieMap);
    	} else {
    		@SuppressWarnings("unchecked")
			HashMap<Integer, Integer> reservatieMap = (HashMap<Integer, Integer>) session.getAttribute("reservatieMap");
    		if (reservatieMap.containsKey(voorstellingsNr)){
    			int reedsGereserveerd = reservatieMap.get(voorstellingsNr);
    			session.setAttribute("plaatsen", reedsGereserveerd);
    		} 
    	}
    	
    	RequestDispatcher dispatcher = request.getRequestDispatcher(VIEW);
		dispatcher.forward(request, response);
	}
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	HttpSession session = request.getSession();
    	int voorstellingsNr = Integer.parseInt(request.getParameter("voorstellingsNr"));
    	Voorstelling voorstelling = sqlDAO.findOneVoorstelling(voorstellingsNr);
    	session.setAttribute("voorstelling", voorstelling);
    	    	
		@SuppressWarnings("unchecked")
		HashMap<Integer, Integer> reservatieMap = (HashMap<Integer, Integer>) session.getAttribute("reservatieMap");
		if (reservatieMap.containsKey(voorstellingsNr)){
			int reedsGereserveerd = reservatieMap.get(voorstellingsNr);
			session.setAttribute("plaatsen", reedsGereserveerd);
		} 
    	
    	
    	String stringske = null;
    	if (request.getParameter("plaatsen") != ""){
    		try {
		    	int aantalPlaatsen = Integer.parseInt(request.getParameter("plaatsen"));
		    	if (aantalPlaatsen < 1 || aantalPlaatsen > voorstelling.getVrijePlaatsen()){
		    		stringske = "Tik een getal tussen 1 en " + voorstelling.getVrijePlaatsen();
		    		session.setAttribute("foutmelding", stringske);
		    		String parameterString = "?voorstellingsNr=" + voorstellingsNr;
		    		response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_INCORRECT_URL + parameterString));
		    		session.removeAttribute("plaatsen");
		    	} else {
		    		String parameterString = "?voorstellingsNr=" + voorstellingsNr + "&plaatsen=" + Integer.parseInt(request.getParameter("plaatsen"));
		    		response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_CORRECT_URL + parameterString));
		    		session.removeAttribute("plaatsen");
		    		session.removeAttribute("foutmelding");
		    	}
    		} catch (Exception ex) {
    			stringske = "Tik een getal tussen 1 en " + voorstelling.getVrijePlaatsen();
	    		session.setAttribute("foutmelding", stringske);
	    		String parameterString = "?voorstellingsNr=" + voorstellingsNr;
	    		response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_INCORRECT_URL + parameterString));
	    		session.removeAttribute("plaatsen");
    		}
    	} else {
    		String parameterString = "?voorstellingsNr=" + voorstellingsNr + "&plaatsen=" + Integer.parseInt(request.getParameter("plaatsen"));
    		response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_CORRECT_URL + parameterString));
    		session.removeAttribute("plaatsen");
    	}
    	
    	
    	
    	
	}

}
